//原文链接：https://blog.csdn.net/ITSOK_123/article/details/124195147

//解题代码
//数组拆分后合并+哈希映射查找
class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        int n= nums1.size();
        //初始化返回值与辅助哈希集合
        int num = 0;
        unordered_map<int,int> imap;
        //将前两个数组的所有情况下的相加之和作为一个map存储
        //其中k-v对的含义是：两数之和-该和出现次数
        for(int i = 0;i<n;i++){
            for(int j = 0;j<n;j++){
                imap[nums1[i]+nums2[j]]++;
            }
        }
        /*查看后两个数组的所有情况下的相加之和
        是否可以与前面两个数组的和相加为0*/
        for(int k = 0;k<n;k++){
            for(int l = 0;l<n;l++){
                if(imap.find(0-(nums3[k]+nums4[l])) != imap.end()){
                    num+=imap[0-(nums3[k]+nums4[l])];
                }
            }
        }
        return num;
    }
};